/**
 * 
 */
package com.nari.basic.service;

import java.util.List;

import com.nari.basic.dao.IUserDao;
import com.nari.basic.model.IUser;
import com.nari.coreframe.service.GenericServiceImpl;
import com.nari.platform.model.PageCond;
import com.nari.platform.model.ResultWithPageCond;

/**
 * 
 * @author Xiaopeng
 * @date 2013-7-18
 */
public class UserServiceImpl extends GenericServiceImpl<IUser, String>
		implements IUserService {

	/**
	 * 用户登录
	 * @param userID
	 * @param password
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-7-22
	 */
	public IUser queryLoginUser(String userID, String password) throws Exception {
		IUserDao iUserDao = (IUserDao) this.getiGenericDao();
		return iUserDao.queryLoginUser(userID, password);
	}

	/**
	 * 根据分页等信息查询用户列表
	 * @param userID 用户登录姓名（可选）
	 * @param pid 用户身份证号（可选）
	 * @param pageCond 分页信息
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-7-24
	 */
	public ResultWithPageCond<IUser> queryUserWithResultPage(String userID,
			String pid, PageCond pageCond) throws Exception {
		IUserDao iUserDao = (IUserDao) this.getiGenericDao();
		return iUserDao.queryUserWithResultPage(userID, pid, pageCond);
	}

	/**
	 * 通过角色唯一标识查询用户列表
	 * @param roleUID 角色唯一标识，若为指定角色唯一标识，则返回空
	 * @param userID 用户名（可选）
	 * @param pid 身份证号（可选）
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-7-26
	 */
	public ResultWithPageCond<IUser> queryUserByRoleUID(String roleUID,
			String userID, String pid, PageCond pageCond) throws Exception {
		IUserDao iUserDao = (IUserDao) this.getiGenericDao();
		return iUserDao.queryUserByRoleUID(roleUID, userID, pid, pageCond);
	}

	/**
	 * 查询没有授权指定权限的带分页的用户列表
	 * @param roleUID 角色唯一标识，若为指定角色唯一标识，则返回空
	 * @param userID 用户名（可选）
	 * @param pid 身份证号（可选）
	 * @param pageCond 分页信息
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-7-29
	 */
	public ResultWithPageCond<IUser> queryUserPageWithoutRole(String roleUID,
			String userID, String pid, PageCond pageCond) throws Exception {
		IUserDao iUserDao = (IUserDao) this.getiGenericDao();
		return iUserDao.queryUserPageWithoutRole(roleUID, userID, pid, pageCond);
	}

	/**
	 * 通过角色编号查询对应的用户列表
	 * @param roleID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-1-23
	 */
	public List<IUser> queryUserListByRoleID(String roleID) throws Exception {
		IUserDao iUserDao = (IUserDao) this.getiGenericDao();
		return iUserDao.queryUserListByRoleID(roleID);
	}
	
	/**
	 * 统计相同用户名的用户个数(排除指定的用户)
	 * @param userID 用户名
	 * @param userUuid 指定用户的唯一标识
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-7-18
	 */
	public int countUsersByUserID(String userID, String userUuid) throws Exception {
		IUserDao iUserDao = (IUserDao) this.getiGenericDao();
		return iUserDao.countUsersByUserID(userID, userUuid);
	}
}
